using System;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using Microsoft.ApplicationBlocks.Data;
using Common;
using SystemFrameworks;
using MinCultura.Sipa.DataAccess.AgentesArtes;

namespace MinCultura.Sipa.AgentesArtes
{
	/// <summary>
	/// Summary description for Agentes_SolicitudPropiedad.
	/// </summary>
	public class Agentes_SolicitudPropiedad 
	{
        public Agentes_SolicitudPropiedad(string strCadenaConecxion)
        {
            ConnectionString = strCadenaConecxion;
        }
		#region - Parametros

		public const string SOL_ID_PARAM = "@SOL_ID";
		public const string AGE_ID_PARAM = "@AGE_ID";
		public const string USU_ID_PARAM = "@USU_ID";
		public const string ARE_ID_PARAM = "@ARE_ID";
		public const string SOL_NOMBRE_PARAM = "@SOL_NOMBRE";
		public const string SOL_TELEFONO_PARAM = "@SOL_TELEFONO";
		public const string SOL_CORREO_ELECTRONICO_PARAM = "@SOL_CORREO_ELECTRONICO";
		public const string SOL_RELACION_PARAM = "@SOL_RELACION";
		public const string SOL_ESTADO_PARAM = "@SOL_ESTADO";
		public const string SOL_OBSERVACIONES_PARAM = "@SOL_OBSERVACIONES";
		public const string SOL_FECHA_REGISTRO_PARAM = "@SOL_FECHA_REGISTRO";
		public const string SOL_FECHA_PROCESO_PARAM = "@SOL_FECHA_PROCESO";		

		//CONSULTAS
		public const string AGE_NOMBRES_APELLIDOS_PARAM = "@AGE_NOMBRES_APELLIDOS";
		public const string FECHA_INI_PARAM = "@FECHA_INI";
		public const string FECHA_FIN_PARAM = "@FECHA_FIN";
		public const string FECHA_OPE_PARAM = "@FECHA_OPE";
		public const string SOL_AREAS_PARAM = "@SOL_AREAS";

		#endregion

        #region propiedades

        private string _cadenaConexion;

        public string ConnectionString
        {
            get { return _cadenaConexion; }
            set { _cadenaConexion = value; }
        }

        #endregion

		/// <summary>
		/// Adiciona un Registro de Solicitud de Propiedad de Inf. 
		/// </summary>
		/// <param name="datos">DataTable del tipo Agentes_SolicitudPropiedadData</param>
		/// <param name="transaction">Transaccion del SQLServer</param>
		public void Adicionar(Agentes_SolicitudPropiedadData datos,params SqlTransaction[] transaction)
		{						
			foreach (DataRow row in datos.Rows)
			{
				SqlParameter param1 = new SqlParameter(AGE_ID_PARAM, row[Agentes_SolicitudPropiedadData.AGE_ID_FIELD]);
				SqlParameter param2 = new SqlParameter(USU_ID_PARAM, row[Agentes_SolicitudPropiedadData.USU_ID_FIELD]);
				SqlParameter param3 = new SqlParameter(ARE_ID_PARAM, row[Agentes_SolicitudPropiedadData.ARE_ID_FIELD]);
				SqlParameter param4 = new SqlParameter(SOL_NOMBRE_PARAM, row[Agentes_SolicitudPropiedadData.SOL_NOMBRE_FIELD]);
				SqlParameter param5 = new SqlParameter(SOL_TELEFONO_PARAM, row[Agentes_SolicitudPropiedadData.SOL_TELEFONO_FIELD]);
				SqlParameter param6 = new SqlParameter(SOL_CORREO_ELECTRONICO_PARAM, row[Agentes_SolicitudPropiedadData.SOL_CORREO_ELECTRONICO_FIELD]);
				SqlParameter param7 = new SqlParameter(SOL_RELACION_PARAM, row[Agentes_SolicitudPropiedadData.SOL_RELACION_FIELD]);
				SqlParameter param8 = new SqlParameter(SOL_ESTADO_PARAM, row[Agentes_SolicitudPropiedadData.SOL_ESTADO_FIELD]);
				SqlParameter param9 = new SqlParameter(SOL_OBSERVACIONES_PARAM, row[Agentes_SolicitudPropiedadData.SOL_OBSERVACIONES_FIELD]);
				SqlParameter param10 = new SqlParameter(SOL_FECHA_REGISTRO_PARAM, row[Agentes_SolicitudPropiedadData.SOL_FECHA_REGISTRO_FIELD]);
				SqlParameter param11 = new SqlParameter(SOL_FECHA_PROCESO_PARAM,row[Agentes_SolicitudPropiedadData.SOL_FECHA_PROCESO_FIELD]);				

				if (row[Agentes_SolicitudPropiedadData.SOL_TELEFONO_FIELD] == null || row[Agentes_SolicitudPropiedadData.SOL_TELEFONO_FIELD].ToString() == "")
					param5.Value = DBNull.Value;
				if (row[Agentes_SolicitudPropiedadData.SOL_RELACION_FIELD] == null || row[Agentes_SolicitudPropiedadData.SOL_RELACION_FIELD].ToString() == "")
					param7.Value = DBNull.Value;
				if (row[Agentes_SolicitudPropiedadData.SOL_ESTADO_FIELD] == null || row[Agentes_SolicitudPropiedadData.SOL_ESTADO_FIELD].ToString() == "")
					param8.Value = DBNull.Value;
				if (row[Agentes_SolicitudPropiedadData.SOL_OBSERVACIONES_FIELD] == null || row[Agentes_SolicitudPropiedadData.SOL_OBSERVACIONES_FIELD].ToString() == "")
					param9.Value = DBNull.Value;
				if (row[Agentes_SolicitudPropiedadData.SOL_FECHA_PROCESO_FIELD] == null || row[Agentes_SolicitudPropiedadData.SOL_FECHA_PROCESO_FIELD].ToString() == "")
					param11.Value = DBNull.Value;

				SqlParameter[] parameters = {param1, param2, param3, param4, param5, param6, param7, param8, param9, param10,param11};

				try
				{	
					if (transaction.Length > 0)
						SqlHelper.ExecuteNonQuery(transaction[0], CommandType.StoredProcedure, "PAS_ADICIONAR_ART_SOLICITUD_CAMBIO_PROPIETARIO_AGENTES",parameters);
					else
						SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, "PAS_ADICIONAR_ART_SOLICITUD_CAMBIO_PROPIETARIO_AGENTES",parameters);									
				}
				catch (SqlException sqlEx)
				{
					throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ADICIONAR_ART_SOLICITUD_CAMBIO_PROPIETARIO_AGENTES"), sqlEx);
				}
				catch (Exception ex)
				{
					throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", this.GetType().FullName)+ ".<br>" + ex.Message, ex);
				}
			}			
		}
		

		/// <summary>
		/// Actualizar un conjunto de registros de SolPro
		/// </summary>
		/// <param name="datos">DataTable del tipo Agentes_SolicitudPropiedadData</param>
		/// <param name="transaction">Transaccion de SQLServer</param>
		/// <returns>Booleano: True=Actualizacion Exitosa</returns>
		public bool Actualizar(Agentes_SolicitudPropiedadData datos,params SqlTransaction[] transaction)
		{
			int cant=0;
			bool response=false;
			
			foreach (DataRow row in datos.Rows)
			{
				SqlParameter param1 = new SqlParameter(SOL_ID_PARAM, row[Agentes_SolicitudPropiedadData.SOL_ID_FIELD]);				
				SqlParameter param2 = new SqlParameter(SOL_ESTADO_PARAM, row[Agentes_SolicitudPropiedadData.SOL_ESTADO_FIELD]);
				SqlParameter param3 = new SqlParameter(SOL_OBSERVACIONES_PARAM, row[Agentes_SolicitudPropiedadData.SOL_OBSERVACIONES_FIELD]);			
				SqlParameter param4 = new SqlParameter(SOL_FECHA_PROCESO_PARAM,row[Agentes_SolicitudPropiedadData.SOL_FECHA_PROCESO_FIELD]);
							
				if (row[Agentes_SolicitudPropiedadData.SOL_OBSERVACIONES_FIELD] == null || row[Agentes_SolicitudPropiedadData.SOL_OBSERVACIONES_FIELD].ToString() == "")
					param3.Value = DBNull.Value;				
				if (row[Agentes_SolicitudPropiedadData.SOL_FECHA_PROCESO_FIELD] == null || row[Agentes_SolicitudPropiedadData.SOL_FECHA_PROCESO_FIELD].ToString() == "")
					param4.Value = DBNull.Value;

				SqlParameter[] parameters = { param1, param2, param3, param4 };

				try
				{
					if (transaction.Length>0)
						cant += SqlHelper.ExecuteNonQuery(transaction[0], CommandType.StoredProcedure,"PAS_ACTUALIZAR_ART_SOLICITUD_CAMBIO_PROPIETARIO_AGENTES", parameters);
					else
						cant += SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,"PAS_ACTUALIZAR_ART_SOLICITUD_CAMBIO_PROPIETARIO_AGENTES", parameters);									
				}
				catch (SqlException sqlEx)
				{
					throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ACTUALIZAR_ART_SOLICITUD_CAMBIO_PROPIETARIO_AGENTES"), sqlEx);
				}
				catch (Exception ex)
				{
					throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorActualizar", this.GetType().FullName)+ ".<br>" + ex.Message, ex);
				}
				if (cant>0)
					response = true;
				else
					response = false;
			}
			return response;
		}

		
		/// <summary>
		/// Buscar un regsitro de SolPro determinado
		/// </summary>
		/// <param name="tAgeId">ID del Agente</param>
		/// <param name="tEstado">ID Estado del regsitro de SolPro</param>
		/// <returns>Booleano: True=Regsitro Existe</returns>
		public bool Consultar(decimal tAgeId,byte tEstado)
		{			
			bool response = false;
			SqlParameter param1 = new SqlParameter(AGE_ID_PARAM, tAgeId);				
			SqlParameter param2 = new SqlParameter(SOL_ESTADO_PARAM, tEstado);
			SqlParameter[] parameters = {param1,param2};
			int intTemp = 0;
			try
			{
				intTemp = Convert.ToInt32(SqlHelper.ExecuteScalar(ConnectionString, CommandType.StoredProcedure, "PAS_CONSULTAR_ART_SOLICITUD_CAMBIO_PROPIETARIO_AGENTES_AGEID",parameters));
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_CONSULTAR_ART_SOLICITUD_CAMBIO_PROPIETARIO_AGENTES_AGEID"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorConsultar", this.GetType().FullName)+ ".<br>" + ex.Message, ex);
			}
			if (intTemp!=0)
				response = true;
			return response;
		}

		
		/// <summary>
		/// Eliminar todas las SolPro de un Agente
		/// </summary>
		/// <param name="parAGE_ID">ID del Agente</param>
		/// <param name="transaction">Transaccion de SQLServer</param>
		public void Eliminar(decimal parAGE_ID,params SqlTransaction[] transaction)
		{			
			SqlParameter param1 = new SqlParameter(AGE_ID_PARAM, parAGE_ID);
			SqlParameter[] parameters = {param1};
			try
			{				
				if (transaction.Length>0)
					SqlHelper.ExecuteNonQuery(transaction[0], CommandType.StoredProcedure, "PAS_ELIMINAR_ART_SOLICITUD_CAMBIO_PROPIETARIO_AGENTES", parameters);
				else
					SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, "PAS_ELIMINAR_ART_SOLICITUD_CAMBIO_PROPIETARIO_AGENTES", parameters);				
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ELIMINAR_ART_SOLICITUD_CAMBIO_PROPIETARIO_AGENTES"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", this.GetType().FullName) + ".<br>" + ex.Message, ex);
			}			
		}


		/// <summary>
		/// Consulta, multiple filtrado para el Listado de Solicitudes
		/// </summary>
		/// <param name="tARE_ID">ID del Area</param>
		/// <param name="tEstado">ID Estado del regsitro</param>
		/// <param name="tNombreSol">Nombre del Solicitante</param>
		/// <param name="tNombreAge">Nombre del Agente</param>
		/// <param name="tFechaIniOpe">Fecha de Regsitro</param>		
		/// <param name="IdsAreas">ID's Multiples Areas Artisticas</param>
		/// <param name="tFechas">Fecha de Registro y Proceso de la Sol.</param>
		/// <returns>DataTable del tipo Agentes_SolicitudPropiedadData</returns>
		public Agentes_SolicitudPropiedadData Consultar(decimal tARE_ID,byte tEstado, string tNombreSol, string tNombreAge,byte tFechaIniOpe,int[] IdsAreas,params DateTime[] tFechas)
		{			

			Agentes_SolicitudPropiedadData response = new Agentes_SolicitudPropiedadData();

			SqlParameter param1 = new SqlParameter(ARE_ID_PARAM, tARE_ID);
				if (tARE_ID==0)param1.Value = DBNull.Value;
			SqlParameter param2 = new SqlParameter(SOL_ESTADO_PARAM, tEstado);
				if (tEstado==0)param2.Value = DBNull.Value;
			SqlParameter param3 = new SqlParameter(SOL_NOMBRE_PARAM, tNombreSol);
				if (tNombreSol=="")param3.Value = DBNull.Value;
			SqlParameter param4 = new SqlParameter(AGE_NOMBRES_APELLIDOS_PARAM, tNombreAge);
				if (tNombreAge=="")param4.Value = DBNull.Value;			
			SqlParameter param6 = new SqlParameter(FECHA_INI_PARAM,tFechas[0]);
			SqlParameter param7 = new SqlParameter(FECHA_OPE_PARAM, tFechaIniOpe);			
			SqlParameter param8 = new SqlParameter(FECHA_FIN_PARAM, DBNull.Value);						
			if (tFechas.Length>1)
			{				
				param8.Value = tFechas[1];																	
			}	

			// -- Areas --
			SqlParameter param10 = new SqlParameter(SOL_AREAS_PARAM, DBNull.Value);
			if (IdsAreas.Length>0)
			{
				StringBuilder strAreas = new StringBuilder();				
				foreach(int dcId in IdsAreas)
				{						
					strAreas.Append(dcId.ToString());
					strAreas.Append(",");
				}				
				param10.Value = strAreas.ToString();
			}			

			SqlParameter[] parameters = {param1,param2,param3,param4,param6,param7,param8,param10};
			try
			{
				SqlHelper.ExecuteDataTable(ConnectionString, CommandType.StoredProcedure, "PAS_CONSULTAR_ART_SOLICITUD_CAMBIO_PROPIETARIO_AGENTES",response, parameters);
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_CONSULTAR_ART_SOLICITUD_CAMBIO_PROPIETARIO_AGENTES"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorConsultar", this.GetType().FullName)+ ".<br>" + ex.Message, ex);
			}
			return response;
		}

	}
}
